package com.linxiao.hrcrm.domain;

import java.math.BigDecimal;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 客户薪资记录对象 crm_customer_salary
 *
 * @author zhoudong
 * @date 2024-01-03
 */
public class CrmCustomerSalary extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** 时薪计算方式，精确计算 */
    public static final String SALARY_HOURLY_RATE_CALCULATION_ACCURATE = "ACCURATE";
    /** 时薪计算方式，刻钟计算 */
    public static final String SALARY_HOURLY_RATE_CALCULATION_QUARTER = "QUARTER";
    /** 时薪计算方式，半点计算 */
    public static final String SALARY_HOURLY_RATE_CALCULATION_HALF = "HALF";
    /** 时薪计算方式，小时计算 */
    public static final String SALARY_HOURLY_RATE_CALCULATION_HOUR = "HOUR";

    /** 审核状态，待审批 */
    public static final String AUDIT_STATUS_AUDIT = "AUDIT";
    /** 审核状态，审批通过 */
    public static final String AUDIT_STATUS_PASS = "PASS";
    /** 审核状态，审批拒绝 */
    public static final String AUDIT_STATUS_REFUSE = "REFUSE";


    /** 发放状态，待结算 */
    public static final String PAYMENT_STATUS_NO_SETTLE = "NO_SETTLE";
    /** 发放状态，待发放 */
    public static final String PAYMENT_STATUS_WAITING = "WAITING";
    /** 发放状态，发放中 */
    public static final String PAYMENT_STATUS_PROGRESS = "PROGRESS";
    /** 发放状态，已发放 */
    public static final String PAYMENT_STATUS_GRANT = "GRANT";

    /** 薪资单位：小时 */
    public static final String SALARY_UNIT_HOUR = "HOUR";
    /** 薪资单位：天 */
    public static final String SALARY_UNIT_DAY = "DAY";
    /** 薪资单位：月 */
    public static final String SALARY_UNIT_MOON = "MOON";




    /**
     * 主键ID
     */
    private Long id;

    /**
     * 商户ID
     */
    @Excel(name = "商户ID")
    private Long mchId;

    /**
     * 客户ID
     */
    @Excel(name = "客户ID")
    private Long customerId;

    /**
     * 签卡开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "签卡开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date signInStartTime;

    /**
     * 签卡结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "签卡结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date signInEndTime;

    /**
     * 签卡时长
     */
    @Excel(name = "签卡时长")
    private String workDuration;

    /**
     * 签卡秒数
     */
    @Excel(name = "签卡秒数")
    private Long workSecond;

    /**
     * 签卡分钟
     */
    @Excel(name = "签卡分钟")
    private Long workMinute;

    /** 单位薪资 */
    @Excel(name = "薪资单位")
    private String salaryUnit;

    /**
     * 单位薪资
     */
    @Excel(name = "单位薪资")
    private BigDecimal salaryRate;

    /**
     * 薪资计算方式
     */
    @Excel(name = "薪资计算方式")
    private String hourlyRateCalculation;

    /**
     * 所属工地
     */
    @Excel(name = "所属工地")
    private Long worksiteId;

    /**
     * 所属项目
     */
    @Excel(name = "所属项目")
    private Long projectId;

    /**
     * 所属负责人ID
     */
    @Excel(name = "所属负责人ID")
    private Long responsiblePersonId;

    /**
     * 薪资
     */
    @Excel(name = "薪资")
    private BigDecimal salaryAmount;

    /**
     * 审核状态
     */
    @Excel(name = "审核状态")
    private String auditStatus;

    /**
     * 发放状态
     */
    @Excel(name = "发放状态")
    private String paymentStatus;

    /** 客户名称，不保存数据库，仅做展示使用 */
    @Excel(name = "客户名称")
    private String customerName;

    public void setId(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public void setMchId(Long mchId) {
        this.mchId = mchId;
    }

    public Long getMchId() {
        return mchId;
    }

    public void setCustomerId(Long customerId) {
        this.customerId = customerId;
    }

    public Long getCustomerId() {
        return customerId;
    }

    public void setSignInStartTime(Date signInStartTime) {
        this.signInStartTime = signInStartTime;
    }

    public Date getSignInStartTime() {
        return signInStartTime;
    }

    public void setSignInEndTime(Date signInEndTime) {
        this.signInEndTime = signInEndTime;
    }

    public Date getSignInEndTime() {
        return signInEndTime;
    }

    public BigDecimal getSalaryRate() {
        return salaryRate;
    }

    public void setSalaryRate(BigDecimal salaryRate) {
        this.salaryRate = salaryRate;
    }

    public String getHourlyRateCalculation() {
        return hourlyRateCalculation;
    }

    public void setHourlyRateCalculation(String hourlyRateCalculation) {
        this.hourlyRateCalculation = hourlyRateCalculation;
    }

    public void setWorksiteId(Long worksiteId) {
        this.worksiteId = worksiteId;
    }

    public Long getWorksiteId() {
        return worksiteId;
    }

    public void setProjectId(Long projectId) {
        this.projectId = projectId;
    }

    public Long getProjectId() {
        return projectId;
    }

    public void setResponsiblePersonId(Long responsiblePersonId) {
        this.responsiblePersonId = responsiblePersonId;
    }

    public Long getResponsiblePersonId() {
        return responsiblePersonId;
    }

    public void setSalaryAmount(BigDecimal salaryAmount) {
        this.salaryAmount = salaryAmount;
    }

    public BigDecimal getSalaryAmount() {
        return salaryAmount;
    }

    public void setAuditStatus(String auditStatus) {
        this.auditStatus = auditStatus;
    }

    public String getAuditStatus() {
        return auditStatus;
    }

    public void setPaymentStatus(String paymentStatus) {
        this.paymentStatus = paymentStatus;
    }

    public String getPaymentStatus() {
        return paymentStatus;
    }

    public String getSalaryUnit() {
        return salaryUnit;
    }

    public void setSalaryUnit(String salaryUnit) {
        this.salaryUnit = salaryUnit;
    }

    public String getWorkDuration() {
        return workDuration;
    }

    public void setWorkDuration(String workDuration) {
        this.workDuration = workDuration;
    }

    public Long getWorkSecond() {
        return workSecond;
    }

    public void setWorkSecond(Long workSecond) {
        this.workSecond = workSecond;
    }

    public Long getWorkMinute() {
        return workMinute;
    }

    public void setWorkMinute(Long workMinute) {
        this.workMinute = workMinute;
    }

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    @Override
    public String toString() {
        return "CrmCustomerSalary{" +
                "id=" + id +
                ", mchId=" + mchId +
                ", customerId=" + customerId +
                ", signInStartTime=" + signInStartTime +
                ", signInEndTime=" + signInEndTime +
                ", workDuration='" + workDuration + '\'' +
                ", workSecond=" + workSecond +
                ", workMinute=" + workMinute +
                ", salaryUnit='" + salaryUnit + '\'' +
                ", salaryRate=" + salaryRate +
                ", hourlyRateCalculation='" + hourlyRateCalculation + '\'' +
                ", worksiteId=" + worksiteId +
                ", projectId=" + projectId +
                ", responsiblePersonId=" + responsiblePersonId +
                ", salaryAmount=" + salaryAmount +
                ", auditStatus='" + auditStatus + '\'' +
                ", paymentStatus='" + paymentStatus + '\'' +
                '}';
    }
}
